package JUC;

import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;

public class FibonacciTask extends RecursiveTask<Long> {
    private final int n;

    public FibonacciTask(int n) {
        this.n = n;
    }

    @Override
    protected Long compute() {
        if (n <= 1) {
            return (long) n;
        } else {
            // 创建两个子任务，分别计算前两个斐波那契数
            FibonacciTask task1 = new FibonacciTask(n - 1);
            FibonacciTask task2 = new FibonacciTask(n - 2);

            // 使用ForkJoinPool进行并行执行
            invokeAll(task1, task2);

            // 获取子任务的结果
            long result1 = task1.join();
            long result2 = task2.join();

            // 合并子任务的结果
            return result1 + result2;
        }
    }

    public static void main(String[] args) {
        // 创建ForkJoinPool实例
        ForkJoinPool forkJoinPool = new ForkJoinPool();

        // 创建斐波那契数列的计算任务，计算第10个斐波那契数
        FibonacciTask fibonacciTask = new FibonacciTask(10);

        // 提交任务给ForkJoinPool执行
        Long result = forkJoinPool.invoke(fibonacciTask);

        // 输出结果
        System.out.println("第10个斐波那契数为：" + result);
    }
}
